erlang具有动态加载代码的能力。在开发过程中一般都让代码自动编译加载,这样开发起来很爽。

最有名项目应该是sync了地址:https://github.com/rustyio/sync
最近在用rebar3 构建项目。而且又用到了erlydtl,在用sync自动编译dtl的时候出现了问题。
erlydtl 的编译配置是这样的。

{erlydtl_opts, [
                {doc_root, "priv/templates"},
                {outdir, "ebin"},
                {compiler_options, [report, return, debug_info]},
                {source_ext, ".dtl"},
                {module_ext, "_view"}
                ]}

但是sync编译出来文件结尾老是 _dtl.beam 而不是配置 {module_ext, "_view"} 应该产生的_view.beam,而且生成的beam的位置也不对。

只好翻源码,发现sync并不支持erlydtl_opts的配置,*_dtl.beam 命名是写死的。。sync动态编译dtl的这条路看来是走不通了。
然后翻rebar3 插件。发现了rebar3_auto 插件。简单建了个工程做实验没问题。但是当我在项目中天剑cowboy的后。rebar3_auto 只编译第一次。然后就失灵了。(而且inotify_wait 进程已经不再了。。 ),google后发早就有人爆出这个问题了https://github.com/tsloughter...,看来rebar3_auto 现在还没法用。

接着找到active,但是太小众了,主要支持的mad。对rebar也就是兼容。试了一下没成功也不想深入研究它。

到这的结果就是用rebar3 我还没找到一个好的reload的工具。。。苦逼啊


红色贪吃蛇
200 声望16 粉丝

做游戏的